package cn.tedu.spring.auto;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/*
1.最终想要的Bean对象
2.在该类中注入接口类型的数据Cache
 */
//在装配接口类型的数据时，接口无法创建对象，则接口先找实现类，需要在实现类上加上注解
@Component
public class UserCache {
    /**
     * 解决思路:装配时指定IoC容器中Bean对象的名称;
     * @Resource注解和Autowired注解的区别:
     * 这两个注解都是用来装配对象或接口类型的数据,但是:
     *   1.@Resource注解JDK的标准注解,@Autowired注解是Spring框架的注解;
     *   2.装配规则不同:
     *     @Autowired注解默认只能根据类型进行装配,不能够根据IoC容器中Bean对象的名称进行装配;
     *     如果需要根据IoC容器中Bean对象的名称进行装配,则需要结合@Qualifier注解进行装配;
     *     而Resource注解装配规则为:
     *     2.1 根据IoC容器中Bean对象的名称进行装配[name参数];
     *     2.2 如果未指定name参数,则把属性名作为名称进行装配;
     *     2.3 如果属性名和IoC容器中Bean对象的名称也不一致,则根据类型装配;
     */
   @Autowired
   @Qualifier(value="cacheImpl1")  //value参数代表IoC容器中Bean对象的名称
   //@Resource(name="cacheImpl1")
   //@Resource
    private Cache cache;
}
